home *** CD-ROM | disk | FTP | other *** search
/ NetNews Offline 2 / NetNews Offline Volume 2.iso / news / comp / lang / c-part1 / 9345 < prev    next >
Encoding:
Internet Message Format  |  1996-08-05  |  7.8 KB

  1. Path: newshost.lanl.gov!tanmoy
  2. From: tanmoy@qcd.lanl.gov (Tanmoy Bhattacharya)
  3. Newsgroups: comp.lang.ada,comp.lang.c
  4. Subject: Re: C/C++ knocks the crap out of Ada
  5. Date: 09 Mar 1996 16:52:53 GMT
  6. Organization: Los Alamos National Laboratory
  7. Distribution: world
  8. Message-ID: <TANMOY.96Mar9095253@qcd.lanl.gov>
  9. References: <JSA.96Feb16135027@organon.com> <4gaa6l$8mk@post.gsfc.nasa.gov>
  10.     <4gd94r$isu@mack.rt66.com> <1996Feb22.005518.13396@leeweyr.sccsi.com>
  11.     <4gvrffINNlqo@anvil.ugrad.cs.ubc.ca>
  12.     <4h4j31$1ga3@watnews1.watson.ibm.com>
  13.     <TANMOY.96Feb29144112@qcd.lanl.gov>
  14.     <4hf485$1mgv@watnews1.watson.ibm.com>
  15.     <TANMOY.96Mar4155315@qcd.lanl.gov> <4hq7q4$qik@watnews1.watson.ibm.com>
  16. NNTP-Posting-Host: qcd.lanl.gov
  17. Mime-Version: 1.0
  18. Content-Type: text
  19. In-reply-to: ncohen@watson.ibm.com's message of 8 Mar 1996 21:11:32 GMT
  20.  
  21. In article <4hq7q4$qik@watnews1.watson.ibm.com>
  22. ncohen@watson.ibm.com (Norman H. Cohen) writes:
  23. <snip>
  24. NHC: |> This is the only mistake in your post: 
  25. NHC: |>
  26. NHC: |> The standard requires a diagnostic whenever any constraint or syntax
  27. NHC: |> rule is violated. (5.1.1.3). After diagnosing the error, it can do
  28. NHC: |> whatsoever it pleases.
  29. NHC: 
  30. NHC: I think ANSI ripped me off!  I paid them $60 for a copy of the C
  31. NHC: standard, and the one they sent me only goes up to Section 4. :-)
  32. NHC: (Or perhaps there's a typo in your citation? Please clarify.)
  33.  
  34. ISO adopted ANSI standard with sections renumbered. ANSI adopted the
  35. ISO standard back, so that now section numbers are unambiguous
  36. again. Unfortunately, many people still use the older numbers, so
  37. there is possibility of confusion.
  38.  
  39. 5.1.1.3 is probably 2.1.1.3.
  40.  
  41. NHC: 
  42. NHC: |> In fact, sometimes vendors deliberately want something to invoke
  43. NHC: |> `undefined' behaviour instead of violating a constraint, so that they
  44. NHC: |> can provide an extension that does not need a diagnostic. Some of them
  45. NHC: |> (e.g. $ in a macro name) even get accepted. But, by and large, a
  46. NHC: |> compiler cannot silently compile these category of errors.
  47. NHC: 
  48. NHC: I don't understand how this can be reconciled with your previous
  49. NHC: statement.
  50.  
  51. C makes a distinction between mistakes that must be diagnosed and
  52. those that may be diagnosed. The former category includes all syntax
  53. errors and violation of any requirement specifically set forth in a
  54. `constraints' section in the standard. The latter are violations of
  55. requirements which are mentioned elsewhere. Such violations, along
  56. with all behaviour specifically listed as being in the same category,
  57. as well as constructs for which no meaning can be deduced from the
  58. standard constitute `undefined' behaviour.
  59.  
  60. Thus unless an implementation wants to present the user with a
  61. diagnostic, an extension cannot violate a constraint: it may violate
  62. other requirements in the standard.
  63.  
  64. Most, but not all, of the cases where a requirement is put outside a
  65. constraint section; the violation cannot be deduced by a static
  66. analysis of the code (or rather, not easily). Requirements in the
  67. constraints section never need run-time checks.
  68.  
  69. <snip>
  70. NHC: 
  71. NHC: |>           Heck, my theory is more likely to be wrong than my
  72. NHC: |> programming;
  73. NHC: 
  74. NHC: Either you're a much  better programmer than most of us or you have a
  75. NHC: very poor track record as a theoretician.
  76.  
  77. I wouldn't be much of a theorist if I couldn't recognize garbage when
  78. I saw it :-) Programming bugs hardly ever stay till the end. (On the
  79. other hand, you might argue it is only what I believe.)
  80.  
  81. And by the way, from my experience, the most common kind of errors are
  82. not those that can be statically or dynamically `checked'. I did
  83. occasionally have off by one errors leading to array bound violations,
  84. but, by far, the more important kinds of errors were what one would
  85. call `logic errors'. What I wrote made sense, and probably would have
  86. made sense in every language I expressed myself, but it was not what I
  87. wanted to code. (I actually went through my SCCS tree of the C part of
  88. my current project: except for one case, every non-logic error was
  89. corrected within two days of the mod that introduced the bug in the
  90. first place. I am guessing, but cannot be absolutely certain that this
  91. is because I sometimes take a few days to complete a certain set of
  92. mods before trying to compile and check the code.)
  93.  
  94. I am not speaking against safety. Now that you have clarified that the
  95. run time checks can be switched off (and that that does not count
  96. as an extension which is completely disallowed :-), I have nothing
  97. against Ada. If I found a compiler I liked on the machine I am
  98. currently working on (CM5 by TMC), I will probably give it a
  99. try. 
  100.  
  101. NHC: 
  102. NHC: |>              and I would rather write my code in a `manifestly
  103. NHC: |> correct' way and thoroughly check my code (and cross check it);
  104. NHC: 
  105. NHC: Typical programming problems can be solved in either a "manifestly
  106. NHC: correct" but slow way, or in a more obscure but faster way.  What you
  107. NHC: seem to be saying here is that you are willing to sacrifice performance
  108. NHC: for the sake of greater confidence in the correctness of your prrogram.
  109.  
  110. No. There is a third way: 
  111.   break up the code into manageable chunks.
  112.   code each part in a slow way
  113.   profile the code
  114.   rewrite the chunks that are important to be as fast as one needs
  115.   test the slow chunk against the fast chunk with random input with
  116.     only one property: it satisfies the _documented_ precondition
  117.     of the chunk. (In particular, the random input often violates a
  118.     lot of assumptions which will hold during the actual run, but
  119.     which do not open up any significant optimization opportunities.) 
  120.   leave the slow and fast versions of the code around, along with the
  121.     tester code: this triplet forms the reusable unit for this chunk.
  122.   
  123. It usually means more effort to write the code, but I do not think
  124. that switching languages will significantly alter this habit. As you
  125. can see this leads to optimized code, so there is no conflict with the
  126. following statement.
  127.  
  128. It is possible that someday I will meet code which can be optimized
  129. only when one treats the problem as a whole (i.e. optimization of the
  130. parts would lead to a significantly slower code than optimizing the
  131. entire code into an obscure mess), but I really haven't met such
  132. problems.
  133.  
  134. NHC: But then you continue: 
  135. NHC: 
  136. NHC: |>                                                                 than
  137. NHC: |> write in a language that will check every operation that I do. I
  138. NHC: |> typically code for 3 months human time, and run for 1 year's cpu time: 
  139. NHC: |> I do not really care if that 3 months become four, but I can't afford
  140. NHC: |> the 1 year becoming 13 months!
  141. NHC: 
  142. NHC: Even if we accept that using C instead of Ada only increases your
  143. NHC: development and debugging time by 33%, and that using Ada instead of C
  144. NHC: increases the execution time of your program by 1/12, I find it hard to
  145. NHC: understand why it is okay for your 16 months to be split 4+12, but not
  146. NHC: 3+13, especially since 3+13 gives you a program in whose correctness you
  147.  
  148. Because I pay for the 13, and I am paid for the 4 :-)
  149.  
  150. <snip>
  151. NHC: fail), or are not expensive enough to worry about.  Many programs,
  152. NHC: particularly scienitific programs, can be sped up significantly by
  153. NHC: suppressing checks in a few small critical inner loops, which can be
  154. NHC: scrutinized especially carefully.  The remaining checks contribute very
  155. NHC: little to the overall running time of the program.
  156.  
  157. Correct.
  158.  
  159. Cheers
  160. Tanmoy
  161. --
  162. tanmoy@qcd.lanl.gov(128.165.23.46) DECNET: BETA::"tanmoy@lanl.gov"(1.218=1242)
  163. Tanmoy Bhattacharya O:T-8(MS B285)LANL,NM87545 H:#9,3000,Trinity Drive,NM87544
  164. Others see <gopher://yaleinfo.yale.edu:7700/00/Internet-People/internet-mail>,
  165. <http://alpha.acast.nova.edu/cgi-bin/inmgq.pl>or<ftp://csd4.csd.uwm.edu/pub/
  166. internetwork-mail-guide>. -- <http://nqcd.lanl.gov/people/tanmoy/tanmoy.html>
  167. fax: 1 (505) 665 3003   voice: 1 (505) 665 4733    [ Home: 1 (505) 662 5596 ]
  168.